/**
 * 
 */
package mx.frantor.catalogos.bussines;

import java.util.List;

import flex.messaging.io.ArrayCollection;

import mx.frantor.catalogos.dao.DetallePedidoDAO;
import mx.frantor.catalogos.dao.MateriaPrimaExistenciasDAO;

import mx.frantor.catalogos.dao.ProductosExistenciaDAO;
import mx.frantor.catalogos.daoimp.DetallePedidoDAOImpl;
import mx.frantor.catalogos.daoimp.MateriaPrimaExistenciasDAOImpl;

import mx.frantor.catalogos.daoimp.ProductosExistenciaDAOImpl;
import mx.frantor.catalogos.entitys.DetallePedidoEntity;
import mx.frantor.catalogos.entitys.EstatusDetallePedidoEntity;

import mx.frantor.catalogos.entitys.ProductosExistenciasEntity;


/**
 * @author Hp
 *
 */
public class DetallePedidoBussines {

	private DetallePedidoDAO cliDAO = new DetallePedidoDAOImpl();
	private ProductosExistenciaDAO prodDAO = new ProductosExistenciaDAOImpl();
	private MateriaPrimaExistenciasDAO matPDAO = new MateriaPrimaExistenciasDAOImpl();
	private EstatusDetallePedidoBussines estDetPedBuss = new EstatusDetallePedidoBussines();
	private HistEstatusDetallePedidoBussines histEstDetPedBuss = new HistEstatusDetallePedidoBussines();
	
	//private CallRemMatBussines callRemMatBuss = new CallRemMatBussines();


	public String enviarAProduccion(long idDetPed, Integer cantidad, Long idMaquina, String encargado){
		String res = cambiarEstatus(idDetPed, "EN PROCESO");
		res += estDetPedBuss.agregarEstatusDetPed(idDetPed, cantidad, "EN PROCESO", idMaquina, encargado);
		System.out.println("Proceso de enviar a produccion: " + res);
		return res;
	}
	
//	public String detenerDeProduccion(long idDetPed){
//		String res = cambiarEstatus(idDetPed, "DETENIDO");
//		int cant = 0;
//		cant = estDetPedBuss.eliminarEstatusDetPed(idDetPed, "TERMINADO");
//		callRemMatBuss.dentenerOrd(idDetPed, cant);
//		System.out.println("Proceso de enviar a produccion: " + res);
//		return res;
//	}
	
	public String cambiarEstatus(long idDetPed, String estatus){
		String res="";
		cliDAO.cambiaEstatus(idDetPed, estatus);
		return res;
	}
	public String modificarProductosExistencias(
			ProductosExistenciasEntity modificarUsuario) {
		// TODO Auto-generated method stub
		return null;
	}

	public String modificarProductosCantidad(Long idProductosExistencias,
			Integer cantidad) {
		// TODO Auto-generated method stub
		return null;
	}

	public List<ProductosExistenciasEntity> getTodosProductosExistenciasActivos() {
		// TODO Auto-generated method stub
		return null;
	}

	public ProductosExistenciasEntity getProductossPorClave(String clave) {
		// TODO Auto-generated method stub
		return null;
	}

	public List<ProductosExistenciasEntity> getProductosExistenciasPorId(
			Long idProductosExistencias) {
		// TODO Auto-generated method stub
		return null;
	}

	public ProductosExistenciasEntity getProductosExistenciasId(
			Long idProductosExistencias) {
		// TODO Auto-generated method stub
		return null;
	}

	public String eliminarProductosExistencias(Long idProductosExistencias) {
		// TODO Auto-generated method stub
		return null;
	}

	public String agregarProductosExistencias(
			ProductosExistenciasEntity nuevoUsuario) {
		// TODO Auto-generated method stub
		return null;
	}

	public String agregarProductosExistencia(
			ProductosExistenciasEntity nuevoProd, ArrayCollection catProds) {
		// TODO Auto-generated method stub
		return null;
	}


	public String AgregarDetallePedido(Float cantidad, Long idPedido, Long idProducto, Long idMateriaPrimaPedido, String reflector, String logotipo, String serigrafia, Long idMateria){
		DetallePedidoEntity cliE = new DetallePedidoEntity();
		String res="Error";
		if(idProducto != null){
			cliE.setCantidad(cantidad);
			cliE.setIdPedido(idPedido);
			cliE.setIdProducto(idProducto);
			cliE.setReflector(reflector);
			cliE.setLogotipo(logotipo);
			cliE.setSerigrafia(serigrafia);
			cliE.setEstatus("NUEVO");
			cliE.setIdMateria(idMateria);

			res = cliDAO.agregarDetallePedido(cliE);
			System.out.println("resultado agregar Prod"+res);
		}



		return res;
	}

	public String modificarDetallePedido(Long idDetallePedido, Float cantidad, Long idPedido, Long idProducto, String reflector, String logotipo, String serigrafia, Long idMateria, String estatus, boolean excepcion){
		DetallePedidoEntity cliE = new DetallePedidoEntity();
		String res= "Error";

		cliE.setIdDetallePedido(idDetallePedido);
		cliE.setCantidad(cantidad);
		cliE.setIdPedido(idPedido);
		cliE.setIdProducto(idProducto);
		cliE.setReflector(reflector);
		cliE.setLogotipo(logotipo);
		cliE.setSerigrafia(serigrafia);	
		cliE.setIdMateria(idMateria);
		cliE.setEstatus(estatus);
		cliE.setExcepcionfaltanes(excepcion);

		res = cliDAO.modificarDetallePedido(cliE);

		return res;	
	}

	public String eliminarDetallePedido(long idDetallePedido){
		String res = cliDAO.eliminarDetallePedido(idDetallePedido);
		return res;
	}

	public List<DetallePedidoEntity> getTodosDetallePedidoActivos(){
		List<DetallePedidoEntity> lstclientes = cliDAO.getTodosDetallePedidoActivos();
		return lstclientes;	
	}

	public DetallePedidoEntity getDetallePedidoId(long idDetallePedido){
		DetallePedidoEntity cliE = cliDAO.getDetallePedidoId(idDetallePedido);
		return cliE;
	}

	public List<DetallePedidoEntity> getDetallePedidoPorId(long idDetallePedido){
		List<DetallePedidoEntity> lstclientes = cliDAO.getDetallePedidoPorId(idDetallePedido);

		for(DetallePedidoEntity oce : lstclientes){
			if(oce.getIdDetallePedido()!=0){
				if(oce.getIdProducto()!=null){
					oce.setNombreProducto(prodDAO.getProductosExistenciasId(oce.getIdProducto()).getNombre());
					oce.setTipoProducto(prodDAO.getProductosExistenciasId(oce.getIdProducto()).getTipo());
					oce.setCosto(prodDAO.getProductosExistenciasId(oce.getIdProducto()).getCosto());
				}
				if(oce.getIdMateria()!=null){
					oce.setNombreProducto(matPDAO.getMateriaPrimaExistenciasId(oce.getIdMateria()).getNombre());
					oce.setTipoProducto(matPDAO.getMateriaPrimaExistenciasId(oce.getIdMateria()).getTipo());
					oce.setCosto(matPDAO.getMateriaPrimaExistenciasId(oce.getIdMateria()).getCosto());
				}

			}
		}
		return lstclientes;
	}

	public List<DetallePedidoEntity> getDetallePedidoPorIdProd(long Prod){
		List<DetallePedidoEntity> lstclientes = cliDAO.getCatalogoPPorIdProducto(Prod);

		for(DetallePedidoEntity oce : lstclientes){
			if(oce.getIdDetallePedido()!=0){
				if(oce.getIdProducto()!=null){
					oce.setNombreProducto(prodDAO.getProductosExistenciasId(oce.getIdProducto()).getNombre());
					oce.setTipoProducto(prodDAO.getProductosExistenciasId(oce.getIdProducto()).getTipo());
					oce.setCosto(prodDAO.getProductosExistenciasId(oce.getIdProducto()).getCosto());
				}
				if(oce.getIdMateria()!=null){
					oce.setNombreProducto(matPDAO.getMateriaPrimaExistenciasId(oce.getIdMateria()).getNombre());
					oce.setTipoProducto(matPDAO.getMateriaPrimaExistenciasId(oce.getIdMateria()).getTipo());
					oce.setCosto(matPDAO.getMateriaPrimaExistenciasId(oce.getIdMateria()).getCosto());
				}


			}
		}
		return lstclientes;
	}
	public List<DetallePedidoEntity> getDetallePedidoPorIdPedido(Long idPedido) {
		List<DetallePedidoEntity> lstPedidos = cliDAO.getCatalogoPPorIdPedido(idPedido);

		for(DetallePedidoEntity oce : lstPedidos){
			if(oce.getIdDetallePedido()!=0){
				if(oce.getIdProducto()!=null){
					oce.setNombreProducto(prodDAO.getProductosExistenciasId(oce.getIdProducto()).getNombre());
					oce.setTipoProducto(prodDAO.getProductosExistenciasId(oce.getIdProducto()).getTipo());
					oce.setCosto(prodDAO.getProductosExistenciasId(oce.getIdProducto()).getCosto());
				}
				if(oce.getIdMateria()!=null){
					oce.setNombreProducto(matPDAO.getMateriaPrimaExistenciasId(oce.getIdMateria()).getNombre());
					oce.setTipoProducto(matPDAO.getMateriaPrimaExistenciasId(oce.getIdMateria()).getTipo());
					oce.setCosto(matPDAO.getMateriaPrimaExistenciasId(oce.getIdMateria()).getCosto());
				}


			}
		}
		return lstPedidos;
	}
	
	public String cambiarMaqDetEstatus(long idDetPed, Integer cantAnt, Integer cantAct, 
			String estatusAnt, String estatusAct, long idestatusdetallepedido, Long idMaquinaria, String encargado){
		System.out.println("Llega maquinaria cambio");
		estDetPedBuss.modificarEstatusDetPed(idestatusdetallepedido, idDetPed, cantAct, estatusAct, idMaquinaria, encargado);
		histEstDetPedBuss.agregarEstatusDetPed(idDetPed, cantAct, estatusAct, idMaquinaria, encargado);
		return null;
	}
	
	public String cambiarEstatusDetEstatus(long idDetPed, Integer cantAnt, Integer cantAct, 
			String estatusAnt, String estatusAct, long idestatusdetallepedido, Long idMaquinaria, String encargado){
		System.out.println("Llega estatus cambio");
		estDetPedBuss.cambiarEstatus(idDetPed, cantAnt, cantAct, estatusAnt, estatusAct, idestatusdetallepedido, idMaquinaria, encargado);
		histEstDetPedBuss.agregarEstatusDetPed(idDetPed, cantAct, estatusAct, idMaquinaria, encargado);
		if(estatusAct.equals("ENTREGADO")){
			List<EstatusDetallePedidoEntity> lstTodosEstatus = estDetPedBuss.getEstatusDetallePedidoPorIdDetPedido(
					idDetPed);
			if(lstTodosEstatus.size()>1){
				//Si es mayor a uno es por que aun hay producto en produccion
			}else{
				//Si no ya se puede cambiar el estatus del producto a ENTREGADO
				cambiarEstatus(idDetPed, "ENTREGADO");
			}
		}
		return null;
	}

}
